import loginApi from '@/api/login';
import { setContextData } from '@csii/vx-util';
import store from '@/store/index';
import { Message, MessageBox } from '@csii/vx-web';
import router from '@/router';

const thenFun = async (resolve, res, dispatch) => {
  await handleLogin(res, dispatch);
  return resolve(res);
};
// 处理用户信息，token和菜单数据
const handleLogin = async function(res, dispatch) {
  // 存储token信息
  setContextData('token', store.state.vxadmin.account.token);

  // 保存菜单数据
  let menuHeader = res.data.menuList;
  dispatch('vxadmin/menu/initMenu', menuHeader, { root: true });
  // 设置 vuex 用户信息
  await dispatch('vxadmin/user/set', res.data, { root: true });
};

export default {
  namespaced: true,
  state: {
    token: 'd5f526df-1009-46cc-a84a-95b32ef6628f',
    theme: '',
  },
  mutations: {
    setToken(state, token) {
      state.token = token;
    },
    CHANGE_COLOR(state, color) {
      state.theme = color;
    },
  },
  actions: {
    /**
     * @description 登录
     * @param {Object} param loginId {String} 用户账号
     * @param {Object} param password {String} 密码
     * @param {Object} param route {Object} 登录成功后定向的路由对象 任何 vue-router 支持的格式
     */
    login({ dispatch, commit }, params) {
      return new Promise((resolve, reject) => {
        // 开始请求登录接口
        loginApi
          .AccountLogin(params)
          .then((res) => {
            thenFun(resolve, res, dispatch);
            commit('CHANGE_COLOR', '#F10');
          })
          .catch((err) => {
            reject(err);
          });
      });
    },
    /**
     * @description 注销用户并返回登录页面
     * @param {Object} param context
     * @param {Object} param confirm {Boolean} 是否需要确认
     */
    logout() {
      MessageBox.alert('注销当前账户吗?  打开的标签页和用户设置将会被保存。', '确认操作', {
        confirmButtonText: '确定',
        cancelButtonText: '放弃',
        cancelButtonClass: 'default-btn', // 取消按钮的自定义类名
        type: 'warning',
      })
        .then(() => {
          loginApi
            .logOut()
            .then(async () => {
              sessionStorage.clear();
              // 清空 vuex 用户信息
              // 跳转路由
              router.push({
                name: 'login',
              });
            })
            .catch((error) => {
              Message({
                message: error,
              });
            });
        })
        .catch(() => {
          Message({
            message: '放弃注销用户',
          });
        });
    },
  },
};
